package org.zionchina.cross;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.ui.ISharedImages;

import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.ActionFactory;

import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.zionchina.cross.IBrowserConstants;
import org.zionchina.cross.views.*;

/**
 * An action bar advisor is responsible for creating, adding, and disposing of
 * the actions added to a workbench window. Each window will be populated with
 * new actions.
 */
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
	private IAction newWindowAction, newTabAction, aboutAction;

	
	// Actions - important to allocate these only in makeActions, and then use
	// them
	// in the fill methods. This ensures that the actions aren't recreated
	// when fillActionBars is called with FILL_PROXY.
	private IWorkbenchAction exitAction;

	

	public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
		super(configurer);
	}

	protected void makeActions(final IWorkbenchWindow window) {
		// Creates the actions and registers them.
		// Registering is needed to ensure that key bindings work.
		// The corresponding commands keybindings are defined in the plugin.xml
		// file.
		// Registering also provides automatic disposal of the actions when
		// the window is closed.

		// openViewAction = new OpenViewAction(window, "Open Another Message
		// View", View.ID);
		// register(openViewAction);

		ISharedImages images = window.getWorkbench().getSharedImages();

		newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
		newWindowAction.setText("&New Window");
		register(newWindowAction);

		newTabAction = new Action("New &Tab") { //$NON-NLS-1$
			int counter = 2;
			{
				setId("newTab");
				setActionDefinitionId(IBrowserConstants.COMMAND_PREFIX
						+ "newTab");} //$NON-NLS-1$

			public void run() {
				try {
					String secondaryId = Integer.toString(++counter);
					IWorkbenchPage page = window.getActivePage();
					if (page != null) {
						page.showView(View.ID, secondaryId,
								IWorkbenchPage.VIEW_ACTIVATE);
					}
				} catch (PartInitException e) {
					e.printStackTrace();
				}
			}
		};
		register(newTabAction);

			exitAction = ActionFactory.QUIT.create(window);
		register(exitAction);

		aboutAction = ActionFactory.ABOUT.create(window);
		register(aboutAction);
	}

	protected void fillMenuBar(IMenuManager menuBar) {
		MenuManager fileMenu = new MenuManager("&File",
				IWorkbenchActionConstants.M_FILE);
		IMenuManager viewMenu = new MenuManager("&View", "view"); //$NON-NLS-2$
		MenuManager helpMenu = new MenuManager("&Help",
				IWorkbenchActionConstants.M_HELP);

		menuBar.add(fileMenu);
		menuBar.add(viewMenu);
		// Add a group marker indicating where action set menus will appear.
		menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
		menuBar.add(helpMenu);

		// File
		fileMenu.add(newWindowAction);
		fileMenu.add(newTabAction);
		fileMenu.add(new Separator());

		fileMenu.add(new Separator());
		fileMenu.add(exitAction);
		// Help
		helpMenu.add(aboutAction);

		// IMenuManager fileMenu = new MenuManager("&File", "file");
		// //$NON-NLS-2$
		// menuBar.add(fileMenu);

		// fileMenu.add(quitAction);
		// IMenuManager helpMenu = new MenuManager("&Help", "help");
		// //$NON-NLS-2$
		// menuBar.add(helpMenu);

	}

	protected void fillCoolBar(ICoolBarManager coolBar) {
		IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
		coolBar.add(new ToolBarContributionItem(toolbar, "main"));

		
		IToolBarManager toolBar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
		coolBar.add(new ToolBarContributionItem(toolBar, "standard")); //$NON-NLS-1$

		

	}
}
